﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Clinica_Frba.UserInterface.ABM.Profesional
{
    public partial class agregar_especialidad : Form
    {
        // Diccionario que guarda como key el nombre/detalle de la especialidad y como value su id en la DB.
        private Dictionary<string, string> especialidades_ids;
        private string string_connection;
        private Dictionary<string, string> tipo_especialidad;
        private List<int> ids_a_agregar;
        private AltaProfesional anterior;

        public agregar_especialidad(string conexion,AltaProfesional menuAnterior)
        {
            InitializeComponent();
            this.string_connection = conexion;
            this.especialidades_ids = new Dictionary<string, string>();
            this.ids_a_agregar = new List<int>();
            this.anterior = menuAnterior;
        }

        private void cancelar_btn_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void agregar_especialidad_Load(object sender, EventArgs e)
        {
            Console.WriteLine("Cargando agregar_especialidad");
            this.tipo_especialidad = new Dictionary<string, string>();
            // TODO: esta línea de código carga datos en la tabla 'gD2C2013DataSet_tipo_especialidad.Tipo_especialidad' Puede moverla o quitarla según sea necesario.
            string consulta = "SELECT te_descripcion,te_id FROM vacuna_gdd.Tipo_especialidad";
            using (SqlConnection conn = new SqlConnection(this.string_connection))
            {
                SqlCommand cmd = new SqlCommand(consulta, conn);
                try
                {
                    conn.Open();
                    SqlDataAdapter data = new SqlDataAdapter(consulta, conn);
                    DataSet set = new DataSet();
                    data.Fill(set, "tipoEspecialidad");
                    foreach (DataRow row in set.Tables["tipoEspecialidad"].Rows)
                    {
                        this.tipo_especialidad[row[set.Tables["tipoEspecialidad"].Columns["te_descripcion"]].ToString()] = row[set.Tables["tipoEspecialidad"].Columns["te_id"]].ToString();
                        this.tipo_espe_comboBox.Items.Add(row[set.Tables["tipoEspecialidad"].Columns["te_descripcion"]].ToString());
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    return;
                }
                finally
                {
                    // cerramos la conexion
                    if (conn.State != ConnectionState.Closed)
                        conn.Close();
                    // destruimos la conexion
                    conn.Dispose();
                }
                this.tipo_espe_comboBox.SelectedIndex = 0;
            }

            //actualizar_especialidad_combo();
        }
        private void cargar_especialidades(int tipoEspeId)
        {
            List<string> listResults = new List<string>();

            string consulta = "SELECT espe_descripcion,espe_id " +
                "FROM [vacuna_gdd].Especialidad, [vacuna_gdd].Tipo_especialidad " +
                "WHERE espe_tipo_espe=te_id and te_id= " + tipoEspeId ;


            using (SqlConnection conn = new SqlConnection(this.string_connection))
            {
                SqlCommand cmd = new SqlCommand(consulta, conn);
                try
                {
                    conn.Open();
                    SqlDataAdapter data = new SqlDataAdapter(consulta, conn);
                    DataSet set = new DataSet();
                    data.Fill(set, "especialidades");
         
                    foreach (DataRow row in set.Tables["especialidades"].Rows)
                    {
                        string rowColumn = row[set.Tables["especialidades"].Columns["espe_descripcion"]].ToString();
                        listResults.Add(rowColumn);
         

                        if (!this.especialidades_ids.ContainsKey(rowColumn))
                            this.especialidades_ids[rowColumn] = row[set.Tables["especialidades"].Columns["espe_id"]].ToString();         
                        
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    MessageBox.Show(ex.Message);
                    return;
                }
                finally
                {
                    // cerramos la conexion
                    if (conn.State != ConnectionState.Closed)
                        conn.Close();
                    // destruimos la conexion
                    conn.Dispose();
                }
            }
            //Limpio el combobox antes de llenarlo:
            if (this.espe_comboBox.Items.Count > 0)
                this.espe_comboBox.Items.Clear();

            foreach (string espe in listResults)
            {
                this.espe_comboBox.Items.Add(espe);
            }
        }

        private void actualizar_especialidad_combo()
        {
            Console.WriteLine("Entrando a actualizar_especialidad_combo");
            // Genero los datos para el ComboBox de Especialidades
            string tipo_espe_selected = this.tipo_espe_comboBox.Text;
            int te_id;
            if(Int32.TryParse(this.tipo_especialidad[tipo_espe_selected],out te_id))
                cargar_especialidades(te_id);
            
            
        }

        

        private void agregar_btn_Click(object sender, EventArgs e)
        {
            int id;
            try
            {
                if (Int32.TryParse(this.especialidades_ids[espe_comboBox.Text], out id))
                {
                    this.ids_a_agregar.Add(id);
                    if (!this.especialidades_listBox.Items.Contains(this.espe_comboBox.Text))
                        this.especialidades_listBox.Items.Add(this.espe_comboBox.Text);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Manejo de excepción por intenar agregar un elemento no seleccionado. Error: " + ex.Message);
            }
            
        }

        

        private void tipo_espe_comboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.actualizar_especialidad_combo();
        }

        private void borrar_btn_Click(object sender, EventArgs e)
        {
            try
            {
                int id;
                if (Int32.TryParse(this.especialidades_ids[this.especialidades_listBox.SelectedItem.ToString()], out id))
                {
                    this.ids_a_agregar.Remove(id);
                    MessageBox.Show(this.especialidades_listBox.SelectedItem.ToString());
                    this.especialidades_listBox.Items.Remove(this.especialidades_listBox.SelectedItem);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Manejo de excepcion por no haber un elemento seleccionado. Error: " + ex.Message);
            }
        }

        private void aceptar_btn_Click(object sender, EventArgs e)
        {
            this.anterior.set_ids_especialidades(this.ids_a_agregar);
            foreach (object item in this.especialidades_listBox.Items)
                this.anterior.agregar_especialidades_listBox(item);
            this.Close();
            this.anterior.Show();
        }

        
        

        

       
    }
}
